package org.wanho.sms.factory;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

/**
 * 创建对象的工厂类
 * 
 * 根据类路径下的objs.txt文件中的配置，进行对象的创建
 * 要求：
 * 1.文件中不能有空行
 * 2.注意编写的顺序，由于对象间存在依赖关系，被依赖的对象必须放在依赖对象的前面，使其提前加载并创建
 */
public class ObjectFactory {
	
	/**
	 * 定义一个Map集合，存储对象
	 */
	private static Map<String, Object> objs = new HashMap<String, Object>();
	
	/**
	 * 类加载时读取工厂配置文件，创建相应的对象并存储到集合中，对象是单例的
	 */
	static{
		try (
			BufferedReader reader = new BufferedReader(
					new InputStreamReader(
						ObjectFactory.class.getClassLoader().getResourceAsStream("objects.txt")
					)
			);
		){
			String line = null;
			while((line = reader.readLine())!=null){
				String[] arr = line.split("=");
				objs.put(arr[0], Class.forName(arr[1]).newInstance());
			}
		} catch (Exception e) {
			throw new ExceptionInInitializerError("ObjectFactory初始化失败："+e);
		}
	}
	
	/**
	 * 工厂方法，用来获取对象
	 * @param key 配置文件中等号左边的key
	 * @return 配置文件中等号右边的相应对象，如果没有，则返回null
	 * @date 2023年3月27日 上午11:43:29
	 */
	public static Object getObject(String key){
		return objs.get(key);
	}

}
